/*************************************************************************
	> File Name: vm.h
	> Author: 
	> Mail: 
	> Created Time: Wed 23 Jan 2019 06:48:53 PM EST
 ************************************************************************/
#ifndef clox_vm_h 
#define clox_vm_h 

#include "chunk.h"
#include "table.h"
#include "value.h"  

#define STACK_MAX 256

typedef struct {  
  Chunk* chunk;   
  uint8_t* ip;
  Value stack[STACK_MAX];
  Value* stackTop;     
  Table globals; 
  Table strings;

  Obj* objects;  
} VM;             

typedef enum {            
  INTERPRET_OK,           
  INTERPRET_COMPILE_ERROR,
  INTERPRET_RUNTIME_ERROR 
} InterpretResult;

extern VM vm;

void initVM();    
void freeVM();    
InterpretResult interpret(const char* source);
void push(Value value);                 
Value pop();  

#endif   
